package com.br.pfm.instituicao.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;

import org.springframework.stereotype.Component;

import com.br.pfm.instituicao.dao.InstituicaoDAO;
import com.br.pfm.persistence.model.Instituicao;

@Component
public class InstituicaoDAOImpl implements InstituicaoDAO {
	
	@PersistenceUnit
	EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAConfig");
    EntityManager em = emf.createEntityManager();
    EntityTransaction tx = em.getTransaction();
    
	@Override
	public Instituicao findInstituicao(int idInstituicao) {
		
		Instituicao instituicao = new Instituicao();
		
		try {
			instituicao = (Instituicao) em.createNamedQuery("Instituicao.findInstituicao");
			return instituicao;
			
		} catch (Exception e) {
			e.printStackTrace();
			Logger.getLogger("Erro ao tentar encontrar Instituicao.");
			return null;
		}
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Instituicao> getAllInstituicoes() {
		
		List<Instituicao> instituicoesList = new ArrayList<Instituicao>();
		
		try {
			instituicoesList = (List<Instituicao>) em.createNamedQuery("Instituicao.getAllInstituicoes");
			System.out.println("### Tamanho Lista DAOImpl: " + instituicoesList);
			return instituicoesList;
			
		} catch (Exception e) {
			e.printStackTrace();
			Logger.getLogger("Erro ao tentar retornar a lista de Instituicoes.");
			System.out.println("### Tamanho Lista DAOImpl: " + instituicoesList);
			return null;
		}
	
	}

	@Override
	public boolean editInstituicao(int idInstituicao) {

		boolean result = false;
		
		try {
			
			Query query = em.createNamedQuery("Instituicao.editInstituicao"); 
			
			if (query.equals(true)) {
				result = true;
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			Logger.getLogger("Erro ao tentar editar Instituicao.");
		}
		return result;
	}
	
}
